iT邦幫忙

2022 iThome 鐵人賽

DAY 23
0
Mobile Development

Flutter 30: from start to store系列 第 23

Android版上架流程:申請keyStore、專案打包及簽署

  • 分享至 

  • xImage
  •  

今天會處理要讓用戶下載的app部分,並加上自己的數位簽署,讓google play得以辨識app的開發者

好的,那我們就開始吧!


產生.keystore

  • .keystore內記錄了開發者數位簽署資訊,一個keystore可以簽署多個app。使用此keystore簽署app,視同開發者本人認證是自己開發的,所以是機敏資訊,切勿外流也不要隨著專案commit喔!

  • 產生keystore的流程:

    1. 在Terminal進入想要存放keystore的位置

    2. 在當前路徑之下產生key,透過工具keytool(隨附在之前設定Android環境時下載的JDK中)產生:

      $ keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.jks -alias ALIAS_OF_KEY -keyalg RSA -keysize 2048 -validity 10000
      
      • -keystore: 設定我們想命名的.keystore檔案名稱
      • -alias: 設定對這個key的代稱
    3. 接著keytool會引導你在Terminal中設定key內的相關資料

    4. 全部設定完成後,就會產生一個.keystore檔案在當前的路徑下。

Trouble Shooting

  • 如果系統出現報錯:

    The operation couldn’t be completed. Unable to locate a Java Runtime that supports (null).
    Please visit http://www.java.com for information on installing Java.
    

    代表目前環境並沒有安裝或無法定位JDK,

    1. 安裝JDK後
      $ brew install openJDK
      
    2. 將brew安裝的openJDK加到.bashrc.zshrc
      $ open ~/.bashrc 
      # 或
      $ open ~/.zshrc
      
    3. .bashrc.zshrc中加入當前openjdk所在路徑
      export JAVA_HOME="YOUR_OPENJDK_PATH"
      
    4. 套用設定
      $ source ~/.zshrc
      
    5. 再執行一次keytool相關指令應該就可以了

設定key.properties

  • key.properties會放在當前專案的/android之下,告訴android打包時該用哪個key、key的密碼等等資訊,由於密碼為明碼輸入,key.properties同樣不可外流,也不可隨著專案commit!
  1. 在Apod專案的/android路徑之下,加入key.properties

  2. key.properties中填入對應的資料

    storePassword=keystore的密碼
    keyPassword=key的密碼,由於這次是用keytool產生的,會跟keystore一樣
    keyAlias=下指令時輸入的的ALIAS_OF_KEY
    storeFile=在本機存放.keystore的位置
    

    即可準備打包


專案打包

  • 首先要來設定gradle,gradle在android中扮演了套件管理、簽名、打包、編譯等等的角色。
    1. /android/app/build.gradle設定如下,讓gradle讀到我們剛剛設定的key.properties
      def keystoreProperties = new Properties()
      def keystorePropertiesFile = rootProject.file('key.properties') // 讀取剛才放在/android下的key.properties檔案
      if (keystorePropertiesFile.exists()) {
         keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
      }
      
    2. 接著在同檔案的 buildTypes區域加入release相關設定,並新增signingConfigs(簽署設定),將剛才的keystoreProperties加進去。
      signingConfigs {
         release {
             keyAlias keystoreProperties['keyAlias']
             keyPassword keystoreProperties['keyPassword']
             storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
             storePassword keystoreProperties['storePassword']
         }
      }
      buildTypes {
         release {
             signingConfig signingConfigs.release // 將signingConfigs.debug改為.release
         }
      }
      
  • 接著將寫好的flutter code 編譯成appbundle檔案。過去我們習慣android上執行的是.apk檔,但是自2021年8月起,所有上架的檔案都必須為appbundle(.aab)形式。在Terminal下指令
    $ flutter build appbundle
    
    gradle就會開始幫我們簽署並打包成appbundle。看到以下訊息就代表建構成功,檔案放在build/app/outputs/bundle/release/app-release.aab

    這就是我們準備好的appbundle

    如此一來,我們就準備好完成數位簽署的app了!

Recap

今天進行了以下步驟,準備好供下載的appbundle:

  • 產生keystore
  • gradle讀取keystore並依此設定signingConfig
  • 打包並簽署app

明天一起來完成android上架的最後一關吧~


上一篇
Android版上架流程:註冊GooglePlay帳號
下一篇
Android版上架流程:上架並開放下載
系列文
Flutter 30: from start to store30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言